package fr.bugtracker.service;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.EJB;
import javax.ejb.Startup;
import javax.ejb.Stateless;

import fr.bugtracker.commun.enumeration.EnumParametreApplication;
import fr.bugtracker.commun.outils.UtilsHibernate;
import fr.bugtracker.dao.technique.DaoParametreApplication;
import fr.bugtracker.entity.technique.ParametreApplication;

/**
 * Service ejb type application
 * @author Laurent
 * @version 0.1
 */
@Startup
@Stateless
public class SrvApplication extends AbstractService {

	/**
	 * dao des paramètres de l'application
	 */
	@EJB
	private DaoParametreApplication daoParametreApplication;
	/**
	 * la liste des paramètres de l'application
	 */
	private Map<EnumParametreApplication, String> listeParametre = new ConcurrentHashMap<EnumParametreApplication, String>();

	/**
	 * Constructeur de la classe <code>SrvApplication</code>.
	 */
	public SrvApplication() {
	}

	/**
	 * Méthode d'initialisation du service
	 */
	@PostConstruct
	private void init() {
		for (ParametreApplication parametreApplication : daoParametreApplication.findAll()) {
			listeParametre.put(parametreApplication.getCode(), parametreApplication.getValeur());
		}
	}

	/**
	 * <p><b>Accès en lecture à l'attribut listeParametre.</b></p>
	 * @return Retourne l'attribut listeParametre sous forme de <code>Map<EnumParametreApplication,String></code>.
	 */
	public Map<EnumParametreApplication, String> getListeParametre() {
		return this.listeParametre;
	}

	/**
	 * <p><b>Accès en écriture à l'attribut listeParametre.</b></p>
	 * @param listeParametre L'attribut listeParametre à modifier.
	 */
	public void setListeParametre(Map<EnumParametreApplication, String> listeParametre) {
		this.listeParametre = listeParametre;
	}

	/**
	 * Méthode de destruction du bean
	 */
	@PreDestroy
	private void destroy() {
		UtilsHibernate.closeSession();
	}

}
